import { isRef } from "vue";

// 是否为计算属性
export function isComputed(v) {
    // 计算属性是 ref 同时也是一个 effect
    return !!(isRef(v) && v.effect);
}

// 是否为对象
export function isObject(value) {
    return typeof value === "object" && value !== null;
}

// 递归合并对象
export function mergeReactiveObject(target, state) {
    for (let key in state) {
        let oldValue = target[key];
        let newValue = state[key]; // 这里循环的时候 拿出来 丧失响应式

        if (isObject(oldValue) && isObject(newValue)) {
            target[key] = mergeReactiveObject(oldValue, newValue);
        } else {
            target[key] = newValue;
        }
    }
    return target;
}
